Ca fait un moment que ca me titille : Arduino serveur web.
Pour faire quoi ? Par exemple donner la température dans une pièce.
Montage Arduino serveur web
J’ai directement pris une carte arduino ethernet, pas un shield…
Bon le plus difficile est de faire des copier-coller de ce qu’on peut trouver sur le web.
voici quelques sources intéressantes :
http://phmarduino.free.fr/
Le code utilisé sur cette appli.
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> // Remplacer les adresses MAC et IP par celles de votre Arduino Ethernet byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xF6, 0x27 }; byte ip[] = { 192,168,0, 200 }; // Création de l'objet server de type EthernetServer disponible sur le port 8080 histoire de rediriger car j'ai déjà un serveur web sur le port 80 EthernetServer server(8080); OneWire ds(7); // on pin 7 (a 4.7K resistor is necessary) void setup() { // Démarrage de la connexion Ethernet et du serveur WEB server Ethernet.begin(mac, ip); server.begin(); Serial.begin(9600); analogReference(INTERNAL); //Permet de fixer la temperature de refernce à 1,1 volt } void loop() { byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius, fahrenheit; if ( !ds.search(addr)) { Serial.println("No more addresses."); Serial.println(); ds.reset_search(); delay(10*1000); //10 secondes de pause return; } Serial.print("ROM ="); for( i = 0; i < 8; i++) { Serial.write(' '); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return; } Serial.println(); ds.reset(); ds.select(addr); ds.write(0x44, 1); delay(1000); // maybe 750ms is enough, maybe not present = ds.reset(); ds.select(addr); ds.write(0xBE); for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); // at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } celsius = (float)raw / 16.0; //Déclaration et initialisation des variables float mesure=0; //Variable pour le stockage mesure retournée par le capteur float tension=0; //Variable pour le stockage de la tension float temperature=0; //Variable pour le stockage de la température float tempmin=100; //Temperature min float tempmax=0; //Temperature max int portana0 = 0; //Numéro du port analogique sur lequel la température est mesurée //Ecoute des requetes client (browser WEB) delay(1000); EthernetClient client = server.available(); if (client) { // Gestion de la fin de la requête WEB qui est indiquée par l'envoi d'une ligne blanche boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); client.println("<!DOCTYPE html>"); client.println("<html>"); client.println("<head>"); client.println("<title>Arduino Serveur Web et capteur temperature</title>"); client.println("<meta http-equiv=\"refresh\" content=\"30\" >"); client.println("</head><body bgcolor=\"#000000\" text=\"#ffffff\" link=\"#0000ff\" vlink=\"#0000ff\" alink=\"#ff0000\">"); client.print("<h1>Arduino en serveur web</h1><h2>Température</h2>"); client.print("Temperature ambiante dans le bureau (chez moi) = "); client.print(celsius); client.print("°C<br>"); client.println("(mise à jour toutes les 30s)"); client.print("<h2>Luminosité</h2>"); client.println("A venir<br><br>"); client.print("<h2>Présence</h2>"); client.println("A venir<br><br>"); client.println("<br><br><p align=\"right\"><a href=\"http://www.dekloo.net/\">Dekloo</a></p></body>"); client.println("</html>"); client.stop(); } }}}
Cheking et uploading plus tard…
Redirection du port 8080 vers l’IP de la carte Arduino
Et ouverture de mon adresse:8080 avec un navigateur, ca donne :
Et voila !!!!!!!!!!!
Trop simple.
[…] J’ai ajouté une photo-résistance au premier montage présenté ici […]